﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Свойства и функции для работы с меню - Макросы</title>
<meta http-equiv="Content-Type" Content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="../../../../styles/styles.css">
<script language="javascript" src="../../../links.js" type="text/javascript"></script>
</head>
<body>

<h1>Свойства и функции для работы с меню и списками</h1>
<div class="navbar">
<a href="../../../index.html">главная</a> |
<a href="../../index.html">Макросы</a> |
<a href="../index.html">Макроязык</a> |
<a href="index.html">Свойства и функции: по областям</a>
</div>

<p>К меню относятся следующие <a href="../../about/macroarea.html">области</a>:
прочие меню (<code>Menu</code>), основное меню (<code>MainMenu</code>),
меню пользователя (<code>UserMenu</code>), меню выбора диска (<code>Disks</code>).</p>

<p>Под списками понимается: список автодополнения (<code>AutoCompletion</code>),
различные открытые списки в диалогах (<code>Dialog</code>) - List box / Combo box / History,
а также список всех найденных строк (<code>FindAll</code>) в редакторе (<code>Editor</code>).</p>

<p>Далее в тексте "меню" и "списки" не разделяются, и упоминаются под общим названием "меню".</p>

<h2>Свойства</h2>
<table class="cont2 funcs">
  <col>
  <col>
  <col class="descr">
  <tr><th colspan="3">Все меню</th></tr>
  <tr><th>Оператор</th><th>Тип</th><th>Описание</th></tr>
  <tr>
    <td><a name="Menu.Value">Menu.Value</a></td>
    <td>String</td>
    <td>содержимое текущего пункта меню (см. также <a href="#menu.getvalue">menu.getvalue()</a>)</td>
  </tr>
  <tr>
    <td><a name="Menu.Info.Id">Menu.Info.Id</a></td>
    <td>String</td>
    <td>строковое представление идентификатора текущего меню</td>
  </tr>
  <tr>
    <td><a name="Menu.HorizontalAlignment">Menu.HorizontalAlignment</a></td>
    <td>Number</td>
    <td><p>горизонтальное выравнивание пунктов меню:</p>
       <table class="cont2 params lite tiny">
        <col class="value">
        <col>
        <tr><th><var>Значение</var></th><th>Описание</th></tr>
        <tr><td>0</td><td>пункты меню не выравнены</td></tr>
        <tr><td>1</td><td>все пункты меню выравнены налево</td></tr>
        <tr><td>2</td><td>все пункты меню выравнены направо</td></tr>
        <tr><td>4</td><td>все пункты меню выравнены по аннотациям, т.е., по найденному образцу в списке всех найденных строк (<code>FindAll</code>) в редакторе (<code>Editor</code>)</td></tr>
        <tr><td>-1</td><td>оператор вызван не для меню</td></tr>
       </table>
  </tr>

  <tr><th colspan="3">Меню выбора диска</th></tr>
  <tr><th>Оператор</th><th>Тип</th><th>Описание</th></tr>
  <tr>
    <td><a name="Drv.ShowPos">Drv.ShowPos</a></td>
    <td>Number</td>
    <td>для какой панели вызвано меню выбора диска: 1 - для левой (<kbd>Alt</kbd>+<kbd>F1</kbd>),  2 - для правой (<kbd>Alt</kbd>+<kbd>F2</kbd>).</td>
  </tr>
  <tr>
    <td><a name="Drv.ShowMode">Drv.ShowMode</a></td>
    <td>Number</td>
    <td>информация, отображаемая в меню выбора дисков; набор битовых флагов:
      <table class="cont2 params lite tiny">
        <col class="value">
        <col>
        <tr>
          <th>Флаги</th>
          <th>Описание</th>
        </tr>
        <tr>
          <td>0x00000001</td>
          <td>тип дисков</td>
        </tr>
        <tr>
          <td>0x00000002</td>
          <td>сетевые имена (и пути, ассоциированные с SUBST-дисками)</td>
        </tr>
        <tr>
          <td>0x00000004</td>
          <td>метки дисков</td>
        </tr>
        <tr>
          <td>0x00000008</td>
          <td>тип файловой системы</td>
        </tr>
        <tr>
          <td>0x00000010</td>
          <td>общее и свободное место на дисках</td>
        </tr>
        <tr>
          <td>0x00000100</td>
          <td>общее и свободное место отображается в виде десятичной дроби</td>
        </tr>
        <tr>
          <td>0x00000020</td>
          <td>параметры сменных носителей</td>
        </tr>
        <tr>
          <td>0x00000040</td>
          <td>подключаемые модули (плагины)</td>
        </tr>
        <tr>
          <td>0x00000080</td>
          <td>параметры оптических дисков</td>
        </tr>
        <tr>
          <td>0x00000200</td>
          <td>параметры сетевых дисков</td>
        </tr>
      </table>
    </td>
  </tr>
</table>

<h2>Функции</h2>

<table class="cont2 funcs">
  <col>
  <col class="descr">
  <tr>
    <th>Функция</th>
    <th>Описание</th>
  </tr>
  <tr>
    <td>Pos=<dfn><a name="checkhotkey">checkhotkey</a></dfn>(S[,StartPos])</td>
    <td><p>Функция позволяет проверить и получить позицию элемента, для которого назначена горячая клавиша <var>S</var>.</p>
    <p>Если <var>S</var> - пустая строка, то функция вернёт позицию элемента, для которого горячие клавиши не назначены.</p>
    <p>Если не задать <var>StartPos</var>, то поиск осуществляется с начала.</p>
    <p>Работает как в меню, так и в диалогах.</p>
    <p>Если текущий элемент диалога - открытый список, то функция работает не с диалогом, а с этим списком.</p>
    <p>Возвращает позицию найденного элемента. 0 - ничего не найдено,
       -1 - функция вызвана не из меню/диалога/списка.</p>
    <p>Например:</p>
    <p>В меню вызова плагинов (<kbd>F11</kbd>) плагину S&amp;R назначена
    горячая клавиша '7'.</p>
    <p>Следующая последовательность макрокоманд для редактора
    вызовет плагин (если хоткей назначен) или стандартный диалог
    поиска (если хоткей не назначен):</p>
    <pre class="codesample"><code>F11 $if (checkhotkey("7")) 7 1 $else Esc AltF7 $end</code></pre>
   </td>
  </tr>
  <tr>
    <td>S=<dfn><a name="gethotkey">gethotkey</a></dfn>([Pos])</td>
    <td><p>Возвращает горячую клавишу <var>S</var> для пункта меню с номером <var>Pos</var>.</p>
      <p>Если <var>Pos</var> не указан, или равен 0 - подразумевается текущий пункт.</p>
      <p>Если горячая клавиша для пункта меню не задана, то возвращается пустая строка ("").</p>
      <p>В случае ошибки (не меню; нет хоткея; <var>Pos</var> больше чем количество пунктов меню) также возвращается пустая строка.</p>
    </td>
  </tr>
  <tr>
    <td>N=<dfn><a name="menu.filter">menu.filter</a></dfn>([Action[,Mode]])</td>
    <td><p>Выполняет операции фильтрации (<kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>F</kbd>).</p>
       <table class="cont2 params lite tiny">
        <col class="value">
        <col>
        <tr><th><var>Action</var></th><th>Описание</th></tr>
        <tr><td>0</td><td>включение фильтра
           <table class="cont2 params lite tiny">
            <col class="value">
            <col>
            <tr><th><var>Mode</var></th><th>Описание</th></tr>
            <tr><td>-1</td><td>(по умолчанию) вернуть 1 если фильтр уже включен, 0 - фильтр выключен</td></tr>
            <tr><td>&nbsp;0</td><td>выключить фильтр</td></tr>
            <tr><td>&nbsp;1</td><td>включить фильтр, если фильтр уже включен - ничего не делает</td></tr>
           </table>
        </td></tr>
        <tr><td>1</td><td>фиксация текста фильтра (<kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>L</kbd>)
           <table class="cont2 params lite tiny">
            <col class="value">
            <col>
            <tr><th><var>Mode</var></th><th>Описание</th></tr>
            <tr><td>-1</td><td>(по умолчанию) вернуть 1 если текст фильтра зафиксирован, 0 - фильтр можно менять с клавиатуры</td></tr>
            <tr><td>&nbsp;0</td><td>отменить фиксацию фильтра</td></tr>
            <tr><td>&nbsp;1</td><td>зафиксировать фильтр</td></tr>
           </table>
        </td></tr>
        <tr><td>2</td><td>вернуть 1 если фильтр включен и строка фильтра не пуста</td></tr>
        <tr><td>3</td><td>вернуть количество отфильтрованных (невидимых) строк</td></tr>
        <tr><td>4</td><td>(по умолчанию) подправить высоту списка под количество элементов</td></tr>
       </table>
       <p>Если фильтрация недоступна (не меню; не список) возвращает -1.</p>
       <p>Если код возврата специально не оговорен, в случае успеха возвращает 1, в случае ошибки 0.</p>
    </td>
  </tr>
  <tr>
    <td>S=<dfn><a name="menu.filterstr">menu.filterstr</a></dfn>([Action[,S]])</td>
    <td><p>Выполняет операции со строкой фильтра (<kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>F</kbd>).</p>
       <table class="cont2 params lite tiny">
        <col class="value">
        <col>
        <tr><th><var>Action</var></th><th>Описание</th></tr>
        <tr><td>0</td><td>(по умолчанию) вернуть текущую строку, если фильтр включен</td></tr>
        <tr><td>1</td><td><p>установить (заменить) в фильтре строку <var>S</var></p>
          <p>Если фильтр не был включен - включает его, режим фиксации не трогается, но игнорируется.</p>
          <p>Возвращает предыдущее значение строки фильтра</p>
        </td></tr>
       </table>
    </td>
  </tr>
  <tr>
    <td>S=<dfn><a name="menu.getvalue">menu.getvalue</a></dfn>([Pos])</td>
    <td><p>Возвращает текст пункта меню с номером <var>Pos</var>.</p>
      <p>Если текущий "объект" не меню или позиция <var>Pos</var> не валидна (меньше 0 или больше количества пунктов в меню), то возвращается пустая строка.</p>
      <p>Если <var>Pos</var> не указан или равен 0, то действие аналогично применению <a href="#Menu.Value">Menu.Value</a>.</p>
      <p>Позиция меню не меняется.</p>
    </td>
  </tr>
  <tr>
    <td>b=<dfn><a name="menu.itemstatus">menu.itemstatus</a></dfn>([Pos])</td>
    <td><p>Возвращает в младшем слове набор битовых флагов - состояние пункта меню с номером <var>Pos</var> (текущая позиция - <var>Pos</var>=0 или не указан):</p>
       <table class="cont2 params lite tiny">
        <col class="value">
        <col>
        <tr><th>Флаги</th><th>Описание</th></tr>
        <tr><td>0x00000001</td><td>Признак активности пункта меню. Только один пункт может быть активным.</td></tr>
        <tr><td>0x00000002</td><td>Признак отмеченного пункта меню. Перед текстом будет отображаться метка выбора.</td></tr>
        <tr><td>0x00000004</td><td>Пункт меню отображается как разделитель.</td></tr>
        <tr><td>0x00000008</td><td>Пункт меню недоступен</td></tr>
        <tr><td>0x00000010</td><td>Если флаг установлен, то пункт меню доступен в навигации, но не доступен для выбора.</td></tr>
        <tr><td>0x00000020</td><td>Если флаг установлен, то пункт меню не выводится на экран.</td></tr>
       </table>
       <p>В старшем слове - код символа пометки (<code>U+XXXX</code>).</p>
       <ul class="nomarker">
       <li>Если выставлен флаг <code>0x00000002</code> и старшее слово равно 0, то Far использует символ пометки <code>U+221A</code>.</li>
       <li>Если выставлен флаг <code>0x00000002</code> и старшее слово не равно 0, то Far использует символ пометки из старшего слова.</li>
       <!-- Если флаг <code>0x00000002</code> не выставлен и старшее слово не равно 0, то это ни шиша не обозначает -->
       </ul>
<pre class="codesample"><code>$If(menu.itemstatus() &amp; 0x00000002)
    <a href="general.html#msgbox">msgbox</a>("Selected", <a href="general.html#chr">chr</a>(menu.itemstatus()&gt;&gt;16))
$Else
    msgbox("Not Selected")
$End</code></pre>
       <p>Функция работает со всеми пунктами меню, в том числе с теми, которые в данный момент не отображаются (скрытые пункты учитываются в позиции).</p>
       <p>Если текущий "объект" не меню или позиция <var>Pos</var> невалидна (меньше 0 или больше количества пунктов в меню), то функция возвращает значение -1 (все биты установлены).</p>
  </td>
  </tr>
  <tr>
    <td>Pos=<dfn><a name="menu.select">menu.select</a></dfn>(S[,Mode[,Dir]])</td>
    <td><p>В меню позиционирует курсор на первый пункт, содержащий подстроку <var>S</var>.</p>
    <p>Поиск регистронезависим.</p>
    <p>Если такого пункта нет, то ничего не делает.</p>
    <p>Поиск подстроки ведётся в зависимости от указанного режима <var>Mode</var>:</p>
       <table class="cont2 params lite tiny">
        <col class="value">
        <col>
        <tr><th><var>Mode</var></th><th>Описание</th></tr>
        <tr><td>0</td><td>полное совпадение</td></tr>
        <tr><td>1</td><td>совпадение с началом строки</td></tr>
        <tr><td>2</td><td>совпадение с концом строки</td></tr>
        <tr><td>3</td><td>присутствие подстроки <var>S</var> в пункте меню</td></tr>
       </table>
    <p>Если параметр <var>Mode</var> не указан, подразумевается полное совпадение.</p>
    <p>Параметр <var>Dir</var> задаёт направление поиска:</p>
       <table class="cont2 params lite tiny">
        <col class="value">
        <col>
        <tr><th><var>Dir</var></th><th>Описание</th></tr>
        <tr><td>0</td><td>от начала в конец списка пунктов меню</td></tr>
        <tr><td>1</td><td>от текущей позиции в начало</td></tr>
        <tr><td>2</td><td>от текущей позиции в конец списка</td></tr>
       </table>
    <p>Возвращает позицию пункта меню (если найден), 0 - ошибка при позиционировании (нет пункта или пункт задисаблен), -1 - функция вызвана не для меню.</p>
    <pre class="codesample"><code>F11 $if(menu.select("Advanced compare",0) &gt; 0) Enter $end</code></pre>
  </td>
  </tr>
</table>

<h3>Замечания</h3>
<div class="descr">
Пункты меню нумеруются начиная с 1. В нумерацию также включаются разделители и
заблокированые пункты меню.
</div>

<div class="see">Смотрите также:</div><div class="seecont">
<a href="../../examples.html">Примеры</a>
</div>

</body>

</html>
